﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;

namespace EntitiesLayer
{
    
    public sealed class Referencia :IEntity
    {

        private readonly int idUsuario;

        public int IdUsuario {

            get { return idUsuario; }
        }

        private readonly int idReferencia;

        public int Id
        {
            get { return idReferencia;}
        }
        private readonly string nombre;

        public string Nombre
        {
            get { return nombre; }
            
        }
        private readonly Lazy<IList<Telefono>> listaTelefonos;

       
        public IReadOnlyCollection<Telefono> ListaTelefonos {
            get { 
                if(listaTelefonos!=null && listaTelefonos.Value!=null) 
                    return new ReadOnlyCollection<Telefono>(listaTelefonos.Value);

                return null;  
            }
        }

      

        public Referencia(int idUsuario, string nombre, Lazy<IList<Telefono>> listaTelefonos=null, int idReferencia=0) {
            
            if ( "".Equals(nombre))
                throw new ArgumentNullException();

            this.idReferencia = idReferencia;
            this.nombre = nombre;
            this.listaTelefonos = listaTelefonos;
            this.idUsuario = idUsuario;
        
        }

        public Referencia cambiarNombre(string nombre){
        
            return new Referencia(IdUsuario, nombre, listaTelefonos, Id);
        }


        public override string ToString()
        {
           
            
            return  Nombre;
         
        }


    }
}
